# 1 创建服务器端套接字 server_socket
# 2 绑定ip和端口 ip,port / bind()
# 3 监听来自客户端的请求 listen()
# 4 接受请求, 并创建新的套接字 (conn_socket, client_ip) / accept()
# 5 接受数据或发送数据 recv_data, send_str / recv() send()
# 6 关闭套接字  conn_socket, server_socket / close()

import socket
import time

# 1 创建服务器端套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 参数1: 表示当前套接字 # 参数2: 设置端口号复用选项 # 参数3: 设置端口号复用选项对应的值
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)

# 2 绑定ip和端口
ip = '127.0.0.1'
port = 8888
server_socket.bind((ip, port))

# 3 监听来自客户端的请求
server_socket.listen(128)
print('服务器正在监听中...')

while True:
    # 4 接受请求, 并创建新的套接字 返回(新的连接套接字, 对方ip)
    conn_socket, client_ip = server_socket.accept()
    print('客户端ip-->', client_ip)

    # 5 接受数据或发送数据
    recv_data = conn_socket.recv(1024)
    print('接收到客户端数据:', recv_data.decode('utf-8'))

    send_str = '数据已收到'
    conn_socket.send(send_str.encode('utf-8'))

    # 关闭客户端和服务器端的连接
    conn_socket.close()

server_socket.close()
print('服务器退出')
